#include "BlockQueue.hpp"
#include "task.hpp"

void* consumer(void* args)
{
    BlockQueue<Task>* B = static_cast<BlockQueue<Task>*>(args);

    while(1)
    {
        Task q = B->Pop();
        std::cout << "消费者执行任务了，执行结果为： "  << q.Excute() << std::endl;
        
    }
    return nullptr;
}

void* productor(void* args)
{
    BlockQueue<Task> * B = static_cast<BlockQueue<Task>*>(args);
    int i = 1, j = 1;
    while(1)
    {
        //int i = 0;
        sleep(1);
        Task t(i++,j++);
        B->Equeue(t);
    }
    return nullptr;

}

int main()
{
    
    BlockQueue<Task>* Bq = new BlockQueue<Task>();
    pthread_t tid1, tid2;
    pthread_create(&tid1,nullptr,consumer,Bq);//创建了一个线程1，该线程能够对临界资源Bq进行访问
    pthread_create(&tid2,nullptr,productor,Bq);//创建了一个线程2，该线程同样能够对临界资源Bq进行访问

    pthread_join(tid1,nullptr);
    pthread_join(tid2,nullptr);
    return 0;
}